package com.xinggq.pay.service.pay.channel.yse.pay.qrpay.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.xinggq.pay.service.pay.channel.PayChannelResp;
import com.xinggq.pay.service.pay.channel.yse.pay.common.YseApiRespCode;
import com.xinggq.pay.service.pay.channel.yse.pay.qrpay.dto.YseQrPayRespDTO.YseQrPayRespDetailDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 银盛支付二维码支付主响应实体
 *
 * @author system
 * @since 2025/1/9
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class YseQrPayRespDTO implements PayChannelResp<YseQrPayRespDetailDTO> {

  /**
   * 响应参数的签名串
   */
  @JsonProperty("sign")
  private String sign;

  /**
   * 银盛在线二维码支付响应数据
   */
  @JsonProperty("ysepay_online_qrcodepay_response")
  private YseQrPayRespDetailDTO ysepayOnlineQrcodepayResponse;

  @Override
  public YseQrPayRespDetailDTO getCommonResp() {
    return ysepayOnlineQrcodepayResponse;
  }


  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class YseQrPayRespDetailDTO {

    /**
     * 响应代码
     */
    @JsonProperty("code")
    private String code;

    /**
     * 响应代码描述
     */
    @JsonProperty("msg")
    private String msg;

    /**
     * 商户订单号
     */
    @JsonProperty("out_trade_no")
    private String outTradeNo;

    /**
     * 银盛交易流水号
     */
    @JsonProperty("trade_no")
    private String tradeNo;

    /**
     * 交易状态
     */
    @JsonProperty("trade_status")
    private String tradeStatus;

    /**
     * 二维码链接
     */
    @JsonProperty("qr_code_url")
    private String qrCodeUrl;

    /**
     * 银行类型
     */
    @JsonProperty("bank_type")
    private String bankType;

    /**
     * 原始二维码链接
     */
    @JsonProperty("source_qr_code_url")
    private String sourceQrCodeUrl;

    /**
     * 订单总金额
     */
    @JsonProperty("total_amount")
    private String totalAmount;

    /**
     * 入账日期
     */
    @JsonProperty("account_date")
    private String accountDate;

    /**
     * 过期时间
     */
    @JsonProperty("expire_time")
    private String expireTime;

    /**
     * 发往渠道流水号
     */
    @JsonProperty("channel_send_sn")
    private String channelSendSn;
  }

  public boolean isSuccess() {
    return ysepayOnlineQrcodepayResponse != null && YseApiRespCode.SUCCESS.getCode().equals(
        ysepayOnlineQrcodepayResponse.code);
  }
}